import store from '@/store'

const directives = {
  // 资源权限指令
  permission: {
    /**
     * binding：一个对象下property：name：指令名，不包括v-前缀，value：指令的绑定值, oldValue：指令绑定的前一个值,expression：字符串形式的指令表达式,arg：传给指令的参数，可选,modifiers：一个包含修饰符的对象，例如：v-my-directive.foo.bar 中，修饰符对象为 { foo: true, bar: true }
     * @param {*} el
     * @param {*} binding
     */
    inserted (el, binding) {
      const permissionRes = binding.value
      if (permissionRes) {
        const buttonRes = store.state.resources
        let hasPermission = false
        if (typeof permissionRes === 'string') {
          hasPermission = buttonRes.includes(permissionRes) // includes方法用于判断数组中是否包含指定值
        } else if (Array.isArray(permissionRes)) { // 是数组
          // some() 方法用于检测数组中的元素是否满足指定条件（函数提供）
          hasPermission = permissionRes.some(item => buttonRes.includes(item))
        }
        if (!hasPermission) { // 为真
          if (binding.modifiers.disabled) {
            const inputs = el.getElementsByTagName('input')
            if (inputs && inputs[0]) {
              inputs[0].disabled = true
            }
          } else {
            el.parentNode && el.parentNode.removeChild(el)
          }
        }
      }
    }
  }
}
export default {
  install (Vue) {
    for (const [key, value] of Object.entries(directives)) { // entries方法返回一个给定对象自身可枚举属性的键值对数组
      Vue.directive(key, value) // directive注册一个全局自定义指令
    }
  }
}
